home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / Portable Patmos / usr / include / sys / tty.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-08  |  9.0 KB  |  264 lines  |  [TEXT/R*ch]

  1. /*-
  2.  * Copyright (c) 1982, 1986 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    from: @(#)tty.h    7.10 (Berkeley) 6/26/91
  34.  *    $Id: tty.h,v 1.14 1993/11/09 06:24:04 glass Exp $
  35.  */
  36.  
  37. #ifndef _SYS_TTY_H_
  38. #define _SYS_TTY_H_
  39.  
  40. #include <sys/termios.h>
  41. #include <sys/select.h>            /* for struct selinfo */
  42.  
  43. #ifndef REAL_CLISTS
  44. /*
  45.  * Clists are actually ring buffers. The c_cc, c_cf, c_cl fields have
  46.  * exactly the same behaviour as in true clists.
  47.  * if c_cq is NULL, the ring buffer has no TTY_QUOTE functionality
  48.  * (but, saves memory and cpu time)
  49.  * 
  50.  * *DON'T* play with c_cs, c_ce, c_cq, or c_cl outside tty_subr.c!!!
  51.  */
  52. struct clist {
  53.     int    c_cc;        /* count of characters in queue */
  54.     int    c_cn;        /* total ring buffer length */
  55.     u_char    *c_cf;        /* points to first character */
  56.     u_char    *c_cl;        /* points to next open character */
  57.     u_char    *c_cs;        /* start of ring buffer */
  58.     u_char    *c_ce;        /* c_ce + c_len */
  59.     u_char    *c_cq;        /* N bits/bytes long, see tty_subr.c */
  60. };
  61. #else
  62. /*
  63.  * Clists are character lists, which is a variable length linked list
  64.  * of cblocks, wiht a count of the number of characters in the list.
  65.  */
  66. struct clist {
  67.     int    c_cc;
  68.     u_char    *c_cf;
  69.     u_char    *c_cl;
  70. };
  71. #endif
  72.  
  73. /*
  74.  * Per-tty structure.
  75.  *
  76.  * Should be split in two, into device and tty drivers.
  77.  * Glue could be masks of what to echo and circular buffer
  78.  * (low, high, timeout).
  79.  */
  80. struct tty {
  81.     struct    clist t_rawq;        /* queues */
  82.     struct    clist t_canq;
  83.     struct    clist t_outq;
  84.     void    (*t_oproc) __P((struct tty *tp));    /* device */
  85.     int    (*t_param)();        /* device */
  86.     struct selinfo t_rsel;        /* tty */
  87.     struct selinfo t_wsel;
  88.     caddr_t    t_sc;                /* associated softc */
  89.     caddr_t    t_addr;            /* ??? */
  90.     dev_t    t_dev;            /* device */
  91.     int    t_flags;        /* (compat) some of both */
  92.     int    t_state;        /* some of both */
  93.     struct    session *t_session;    /* tty */
  94.     struct    pgrp *t_pgrp;        /* foreground process group */
  95.     char    t_line;            /* glue */
  96.     short    t_col;            /* tty */
  97.     short    t_rocount, t_rocol;    /* tty */
  98.     short    t_hiwat;        /* hi water mark */
  99.     short    t_lowat;        /* low water mark */
  100.     struct    winsize t_winsize;    /* window size */
  101.     struct    termios t_termios;    /* termios state */
  102. #define    t_iflag        t_termios.c_iflag
  103. #define    t_oflag        t_termios.c_oflag
  104. #define    t_cflag        t_termios.c_cflag
  105. #define    t_lflag        t_termios.c_lflag
  106. #define    t_min        t_termios.c_min
  107. #define    t_time        t_termios.c_time
  108. #define    t_cc        t_termios.c_cc
  109. #define t_ispeed    t_termios.c_ispeed
  110. #define t_ospeed    t_termios.c_ospeed
  111.     long    t_cancc;        /* stats */
  112.     long    t_rawcc;
  113.     long    t_outcc;
  114.     short    t_gen;            /* generation number */
  115.     short    t_mask;            /* interrupt mask */
  116. };
  117.  
  118. #define    TTIPRI    25            /* sleep priority for tty reads */
  119. #define    TTOPRI    26            /* sleep priority for tty writes */
  120.  
  121. #define    TTMASK    15
  122. #define    OBUFSIZ    100
  123. #define    TTYHOG    1024
  124.  
  125. #ifdef KERNEL
  126. #define TTMAXHIWAT    roundup(2048, CBSIZE)
  127. #define TTMINHIWAT    roundup(100, CBSIZE)
  128. #define TTMAXLOWAT    256
  129. #define TTMINLOWAT    32
  130. extern    struct ttychars ttydefaults;
  131. #endif /* KERNEL */
  132.  
  133. /* internal state bits */
  134. #define    TS_TIMEOUT    0x000001    /* delay timeout in progress */
  135. #define    TS_WOPEN    0x000002    /* waiting for open to complete */
  136. #define    TS_ISOPEN    0x000004    /* device is open */
  137. #define    TS_FLUSH    0x000008    /* outq has been flushed during DMA */
  138. #define    TS_CARR_ON    0x000010    /* software copy of carrier-present */
  139. #define    TS_BUSY        0x000020    /* output in progress */
  140. #define    TS_ASLEEP    0x000040    /* wakeup when output done */
  141. #define    TS_XCLUDE    0x000080    /* exclusive-use flag against open */
  142. #define    TS_TTSTOP    0x000100    /* output stopped by ctl-s */
  143. /* was    TS_HUPCLS    0x000200      * hang up upon last close */
  144. #define    TS_TBLOCK    0x000400    /* tandem queue blocked */
  145. /* was    TS_RCOLL    0x000800     * collision in read select */
  146. /* was    TS_WCOLL    0x001000     * collision in write select */
  147. #define    TS_ASYNC    0x004000    /* tty in async i/o mode */
  148. /* state for intra-line fancy editing work */
  149. #define    TS_BKSL        0x010000    /* state for lowercase \ work */
  150. #define    TS_ERASE    0x040000    /* within a \.../ for PRTRUB */
  151. #define    TS_LNCH        0x080000    /* next character is literal */
  152. #define    TS_TYPEN    0x100000    /* retyping suspended input (PENDIN) */
  153. #define    TS_CNTTB    0x200000    /* counting tab width, ignore FLUSHO */
  154.  
  155. #define    TS_LOCAL    (TS_BKSL|TS_ERASE|TS_LNCH|TS_TYPEN|TS_CNTTB)
  156.  
  157. /* define partab character types */
  158. #define    ORDINARY    0
  159. #define    CONTROL        1
  160. #define    BACKSPACE    2
  161. #define    NEWLINE        3
  162. #define    TAB        4
  163. #define    VTAB        5
  164. #define    RETURN        6
  165.  
  166. struct speedtab {
  167.         int sp_speed;
  168.         int sp_code;
  169. };
  170. /*
  171.  * Flags on character passed to ttyinput
  172.  */
  173. #define TTY_CHARMASK    0x000000ff      /* Character mask */
  174. #define TTY_QUOTE       0x00000100      /* Character quoted */
  175. #define TTY_ERRORMASK   0xff000000      /* Error mask */
  176. #define TTY_FE          0x01000000      /* Framing error or BREAK condition */
  177. #define TTY_PE          0x02000000      /* Parity error */
  178.  
  179. /*
  180.  * Is tp controlling terminal for p
  181.  */
  182. #define isctty(p, tp)    ((p)->p_session == (tp)->t_session && \
  183.              (p)->p_flag&SCTTY)
  184. /*
  185.  * Is p in background of tp
  186.  */
  187. #define isbackground(p, tp)    (isctty((p), (tp)) && \
  188.                 (p)->p_pgrp != (tp)->t_pgrp)
  189. /*
  190.  * Empty queue
  191.  */
  192. #define flushq(qq) { \
  193.         register struct clist *q = qq; \
  194.         if (q->c_cc) \
  195.                 ndflush(q, q->c_cc); \
  196. }
  197. /*
  198.  * Modem control commands (driver).
  199.  */
  200. #define    DMSET        0
  201. #define    DMBIS        1
  202. #define    DMBIC        2
  203. #define    DMGET        3
  204.  
  205. #ifdef KERNEL
  206. /* symbolic sleep message strings */
  207. extern     char ttyin[], ttyout[], ttopen[], ttclos[], ttybg[], ttybuf[];
  208.  
  209. #ifdef __STDC__
  210. struct uio;
  211. #endif
  212.  
  213. /* clist stuff */
  214. void    cinit        __P((void));
  215. int    clalloc        __P((struct clist *clp, int size, int quot));
  216. void    clfree        __P((struct clist *clp));
  217. int    getc        __P((struct clist *clp));
  218. int    q_to_b        __P((struct clist *clp, u_char *cp, int count));
  219. int    ndqb        __P((struct clist *clp, int flag));
  220. void    ndflush        __P((struct clist *clp, int count));
  221. int    putc        __P((int c, struct clist *clp));
  222. int    b_to_q        __P((u_char *cp, int count, struct clist *clp));
  223. u_char *nextc        __P((struct clist *clp, u_char *cp, int *c));
  224. u_char *firstc        __P((struct clist *clp, int *c));
  225. int    unputc        __P((struct clist *clp));
  226. void    catq        __P((struct clist *from, struct clist *to));
  227.  
  228. int    ttioctl        __P((struct tty *tp, int com, caddr_t data, int flag));
  229. void    ttsetwater    __P((struct tty *tp));
  230. void    ttstart        __P((struct tty *tp));
  231. int    ttspeedtab    __P((int speed, struct speedtab *table));
  232. void    ttwakeup    __P((struct tty *tp));
  233. int    ttnread        __P((struct tty *tp));
  234. int    ttcompat    __P((struct tty *tp, int com, caddr_t data, int flag));
  235. void    ttyrub        __P((int c, struct tty *tp));
  236. void    ttyrubo        __P((struct tty *tp, int cnt));
  237. void    ttyretype    __P((struct tty *tp));
  238. void    ttyecho        __P((int c, struct tty *tp));
  239. void    ttyoutstr    __P((char *cp, struct tty *tp));
  240. int    ttywait        __P((struct tty *tp));
  241. void    ttyflush    __P((struct tty *tp, int rw));
  242. void    ttyblock    __P((struct tty *tp));
  243. void    ttychars    __P((struct tty *tp));
  244. int    ttyclose    __P((struct tty *tp));
  245. void    ttypend        __P((struct tty *tp));
  246. int    ttysleep    __P((struct tty *tp, caddr_t chan, int pri,
  247.                  char *wmesg, int timo));
  248. void    ttyinfo        __P((struct tty *tp));
  249.  
  250. struct tty *ttymalloc    __P((void));
  251. void    ttyfree        __P((struct tty *));
  252.  
  253. int    ttyopen __P((dev_t dev, struct tty *tp));
  254. void    ttylclose __P((struct tty *tp, int flag));
  255. int    ttread __P((struct tty *tp, struct uio *uio, int flag));
  256. int    ttwrite __P((struct tty *tp, struct uio *uio, int flag));
  257. void    ttyinput __P((int data, struct tty *tp));
  258. void    ttstart __P((struct tty *tp));
  259. int    ttymodem __P((struct tty *tp, int flag));
  260.  
  261. #endif
  262.  
  263. #endif /* !_SYS_TTY_H_ */
  264.